マイクロ分光器の実験
1. M5Stack によるハンディー機: 参考HP: トラ技2020年11月 M5Stackの始め方
マイクロ分光器 C12880MA(5V、λ=340〜850nm、分解能15nm、288画素イメージセンサ、 浜松ホトニクス、秋月)を用いて、簡易型の 光スペクトラム・アナライザを作る。
計測制御と表示には、無料ソフトの Arduino IDE でプログラムの書き込みができる、M5 Stack BASIC(5cm角、約500mA; ディスプレイ、ボタン、ESP32無線モジュール、カードスロット、スピーカーなど搭載の箱型モジュール、
中国製、秋月)を使用し、マイクロ分光器から送られてきた光スペクトラム・データを ディスプレイで表示する。
(1) ソフトウェアのダウンロード:
* 注意) M5StackBASICは発売以来 何年も経っているので、最新バージョンのボード・ソフトやライブラリをダウンロードすると
プログラムをコンパイルできないので、初期の低バージョンのものをダウンロードする。
● Arduino IDE のダウンロード: これは新バージョンのものを、 https://www.arduino.cc/en/software/ からダウンロード。
● M5Stack用の USBドライバをダウンロード: M5StackのHP https://m5stack.com/pages/download から、「 CP210x_VCP_Windows (x64)」 等をダウンロードし、x64(Windous11)等のインストーラーを実行する。 インストールしたら、M5StackBASIC
をPCのUSBにつなげて、PCの「デバイスマネージャー」を開いて、ポート(COMとLPT)の>を押すと
USB-Enhanced-SERIAL CH9012(COM3) 等が新たに表示されることを確認し、このCOMポート番号を記録しておく。
● Arduino IDE の設定:
1) Arduino IDE を開いて ファイル → 基本設定、日本語へ → 下のほうの
追加のボードマネージャーのURL: の □に、
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json と貼って入力し、右下のボタンをクリックする。
2) ツール → ボード → ボードマネージャー → 左上の検索欄に esp32 と入力して、「 esp32
by Espressif systems」、 ver 2,0,0 等の低バージョンのものを選び インストール。
3) スケッチ → ライブラリをインクルード → ライブラリを管理 → 左上の検索欄に M5Stack と入力して、
「M5Stack by M5Stack」、 ver 0.18 等の 低バージョンのものを選び インストール。
4) ボードの設定: M5Stack BASIC の場合、ボードは、 「M5Stack-Core-ESP32」 を選ぶ。
USBドライバのポートを、先に確認した COM3 等に設定。
他の項目の確認: Upload Speed: 921600、 Flash Frequency: 80MHz、
Flash Mode: QIO、 Partision Scheme: defalt(初期値)、 Core Debug Level:
none
● テストプログラムによる設定の確認:
ファイル → スケッチ例 → カスタムライブラリのスケッチ例 → M5Stack → Basics → Hello を押すと、このプログラムが表示される。 次に、M5Stack
BASIC をUSBでつなぎ、 スケッチ → 書き込み を押すと、コンパイルと書き込みがなされ、 M5Stack
の液晶面の左上に、”Hello World” と表示される。
(2) マイクロ分光器と M5Stackの接続回路:
マイクロ分光器からのビデオ出力(10pin)はmax5Vであり、M5Stackも電源5V可、しかし入力信号はMax3.3Vなので、Trのエミッタフォロアで電圧分割する。 マイクロ分光器を14pinの丸ピンソケットに差す時、分光器ケースとピンとの絶縁のために、カプトンテープをソケットに貼ってから挿入する。 M5Stackとの接続線は
QI コネクタ を使う。
M5Stackの電源は 約500mAも食うので、直接 スイッチング電源(5V・1A)から供給した。
(エミッタフォロアのアース側の抵抗は 100ΩのVRにしたが、スライスされた曲線のまま
下に下がるだけなので あまり意味がなかった。)


(3) M5Stackのプログラム:
Arduino IDE を使って C/C#言語で M5Stackのプログラムを作成する。 C12880MAの タイムチャートより、

・ C12880MAにクロック信号を与えると、ほとんど同時に逆位相のトリガ信号(TRG)が出され、その立ち上がりのタイミングがビデオ信号をサンプリングするタイミングなので、ほぼクロックの立下りのタイミングでビデオ信号をサンプリングすることになる。
・ ビデオ信号の開始: ストローブ信号(ST)の6クロック目の立下りから 88クロック目のクロック立下りで、ここからビデオ信号のサンプリングを開始する。 1次元の画素数は288なので、288回サンプリング・AD変換 のサイクルを繰り返す。 M5Stackは 12bitのAD変換を行い、数値を電圧値(V)としてY軸成分としてプロットしていく。
・ 波長変換係数のデータは、C12880MAごとに 5次式の補正データ(製品番号ごとに係数の表が添付; A0、B1、B2、B3、B4、B5)なので、波長補正は
別途プログラム内で行い、X軸(波長軸)の目盛の数値として配置する。(プログラムの数値は、製品個別のC12880MAに添付される表の値) したがって、横軸の波長目盛は300、400などの区切りの良い整数値にならないで、5次式の補正計算をした波長λの整数値になる。 目盛数字の数=プログラム内で横軸を作るときに7回しか計算しない。 (区切りの良い目盛にするためには、計測時にすべてのピクセルで波長λを計算することになり、計測・表示に時間がかかり、瞬間的なデータ取得はできなくなる。)
・ ゲイン(感度)は6段階とし、スタートパルス幅(ST‐ONの幅 = 288クロック)+
48クロック の時間(=蓄積時間)に比例するので、クロックの周期で調整する。(クロック幅=1、5、10、50、100、500mS)
・ M5Stackの押しボタン設定: 右:画面のクリア、 中:計測開始、 左:ゲインの切り替え(右上に0〜5の数字が出る)
プログラム
・・・・ バージョンのミスマッチ(?)から、色の設定がすべて逆(補色)になった(白→黒、青→黄色、緑→赤
など)ので、直しておきました。
(4) 測定結果:
・ PC、蛍光灯、太陽光(曇りガラスを通す):

・ 各種 LED の測定: 大体 ピーク波長が合っている。

2. PC出力の スペクトラム・アナライザ:
いつものように、PICマイコン(マイクロコントローラー)を組み込んで作製し、PCで大きなグラフを描き、記録もできるようにする。(PCプログラムは、VB (ビジュアル・ベーシック)2010
使用) また、X軸(波長軸)の目盛数字も切りの良い数値にする。
計測は、PCから計測指示の”1”コマンド(1回)を送ると、マイコン主体でクロックパルスを作り、同様に、STの6クロック目の立下りから 88クロック目のクロック立下りで、ここからビデオ信号のサンプリングを開始する。 感度は、実は クロックパルスのH状態の長さに比例し、L状態の長さによらないので、H状態の長さを振って 調整することができる。
ADコンバーターの結果は、一旦、I2CによってEEPROM(24LC256)に記録する。 この記録に約5mS/バイトもの時間がかかり、L状態が長くなるが、ほぼ問題なく生データを得ることができる。 288セット(288×4バイト)の電圧データの取得中(約7秒間)は、LEDが点灯する。 1.と違って 瞬間的なデータ取得はできない。
(* もっと早く記録するため、SPI通信・SDカード記録等にすることは、次回の課題とします。)
次に、PCから描画指示の信号を送り、タイマーによって 継続的に”2”コマンドがPICに送られると、一回ごとにPIC内のデータを
PCに送信する。 送られてきたデータは、PCで 5次式の補正計算を288回行なって、グラフに描画する。 (PICは、この類の計算が苦手で、補正計算をすると5〜6回で止まってしまう。
一方、PCは速い。 ただし、マイクロ分光器に付属してくる補正データは、PCプログラム内にいちいち収める必要がある。)


(測定例)
波長のわかっているLEDは、グラフの調整のために利用した。
エタノール‐酢酸カルシウム ゲルによる 低温の炎色反応では、結構不純物のピークが出た。 K(4p → 4s)は 可視光(380nm〜780nm)の赤外側のはずれにあるので Kの炎色反応は弱いように見えるが、実は Na並みに
かなり強いことが判明した。 高温では、より短波長の青みがかった成分が検出されるようになる。
このマイクロ分光器では、分解能が15nmもあるので、当然 Na‐D線の分裂(3p3/2 → 3s 589.0nm と 3p1/2 → 3s 589.6nm)は重なって 区別ができない。

PICプログラム(PIC18F2550) 、 PCプログラム(VB2010)、 module1 (参考の為、exeファイルリンク)